import {FormInstance, FormItemProps} from 'antd';
import {LabelTooltipType} from "antd/es/form/FormItemLabel";

// 单个选项类型
export interface OptionType {
    label: string;
    value: any;
    disabled?: boolean;
    children?: OptionType[];
}

// dict 配置类型
export interface DictConfig {
    url?: string,
    /** 字典名称，用于从全局字典或API加载数据 */
    name?: string;
    /** 静态选项列表（优先级高于name） */
    options?: OptionType[];
    /** 动态加载依赖的参数字段（如["deptId"]） */
    paramKeys?: string[];
    /** 是否作为树形数据展示 */
    asTree?: boolean;
    /** 选项标签的字段名（默认"label"） */
    labelKey?: string;
    /** 选项值的字段名（默认"value"） */
    valueKey?: string;
    /** 多选时的值分隔符（默认","） */
    separator?: string;
    /** 自定义数据加载函数 */
    request?: (params?: Record<string, any>) => Promise<OptionType[]>;
    /** 是否查询条件*/
    editCondition?: (item: any) => boolean,
    /**编辑扩展数据*/
    editExtraData?: any[],
    /**是否有效标记*/
    disabledItemAndChildrenKey?: string
}

// 表单配置类型
export interface FormItemConfig {
    /** 控件类型（input/select/date等） */
    type: string;
    /** 表单校验规则 */
    rules?: FormItemProps['rules'];
    /** 控件额外属性 */
    attrs?: Record<string, any>;
    /** 是否隐藏表单项 */
    hidden?: boolean;
    /** 自定义渲染函数 */
    renderFormItem?: (form: FormInstance, record: any) => React.ReactNode;
    //是否包裹 col 组件，废弃
    wrapCol?: boolean,
    //备注说明
    extra?: string | JSX.Element,
    //提示信息，参考： https://ant-design.antgroup.com/components/form-cn#formitem
    tooltip?: LabelTooltipType

}

// 列配置类型
export interface ColumnConfig<T = any> {
    /** 数据字段名 */
    dataIndex: keyof T | string;
    /** React需要的key */
    key?: string;
    /** 列标题 */
    title: React.ReactNode;
    /** 是否隐藏列 */
    hidden?: boolean;
    /** 是否支持搜索 */
    supportSearch?: boolean;
    /** 表单配置 */
    form?: FormItemConfig;
    /** 字典/选项配置 */
    dict?: DictConfig;
    /** 自定义渲染函数 */
    render?: (value: any, record: T) => React.ReactNode;
    /** 编辑条件判断 */
    editCondition?: (record: T) => boolean;
    /** 占位字符*/
    placeholder?: string,
    /** 列头改变事件*/
    onValuesChange?: (changedValues: any, allValues: any) => void
}

// 完整配置示例
// const columnsConfig: ColumnConfig[] = [
//     {
//         dataIndex: 'gender',
//         key: 'gender',
//         title: '性别',
//         supportSearch: true,
//         form: {
//             type: 'select',
//             rules: [{ required: true, message: '请选择性别' }]
//         },
//         dict: {
//             name: 'genderDict', // 从全局字典加载
//             options: [ // 静态选项（优先级更高）
//                 { label: '男', value: 'male' },
//                 { label: '女', value: 'female' }
//             ],
//             labelKey: 'label', // 可覆盖默认字段名
//             valueKey: 'value'
//         }
//     },
//     {
//         dataIndex: 'roleIds',
//         title: '角色',
//         form: {
//             type: 'select',
//             attrs: {
//                 mode: 'multiple',
//                 showSearch: true
//             }
//         },
//         dict: {
//             name: 'sysRole',
//             paramKeys: ['deptId'], // 根据deptId动态加载
//             request: async ({ deptId }) => { // 自定义请求
//                 return await fetchRolesByDept(deptId);
//             }
//         }
//     },
//     {
//         dataIndex: 'createdAt',
//         title: '创建时间',
//         form: {
//             type: 'date',
//             attrs: {
//                 showTime: true
//             }
//         },
//         render: (value) => formatDate(value)
//     }
// ];